// const foo = (function(){
//     var v = 0;
//     return () =>{
//         return v++  //10
//     }
// }())

// for(let i=0;i<10;i++){
//     console.log(i,'=') //0-9
//     foo()
// }
// console.log(foo())



// const foo = () =>{
//     var arr = []
//     var i; 
//     console.log(i) //undefined

//     for(let i=0;i<10;i++){
//         arr[i] = function(){
//             console.log(i,'===') 
//             // 0 使用外层函数作用域下的变量，被return后就结束了
//         }
//     }
//     return arr[0]
// }

// foo()()   // 一个()代表调用函数或者方法，两个代表立即执行并且返回结果

var fn = null;
const foo = () =>{
    var a = 2;
    function innerFoo(){
        console.log(a)
    }
    fn = innerFoo;
}

const bar = () =>{
    fn()
}

foo(); // 闭包要把里面的函数看成变量，所以此处只是赋值，没有走函数不打印
bar(); // foo()赋值fn = innerFoo = 2,所以打印为 2